package sv_main

import (
	"mudsv/core"
	"mudsv/core/evt"
	"mudsv/zlog"
	"time"
)

// SvMain 主服务
type SvMain struct {
	EvtChan chan *evt.Evt //主事件队列
}

// NewSvMain 主服务
func NewSvMain() *SvMain {
	return &SvMain{
		EvtChan: make(chan *evt.Evt, 1024),
	}
}

var _SvMain = NewSvMain()

func GetServeMain() *SvMain {
	return _SvMain
}

func (sv *SvMain) Init() {
	zlog.Info(sv.Name() + " Init")
}

func (sv *SvMain) Run() {
	zlog.Info(sv.Name() + " Run")

	for {
		core.GetSvCore().SvTime = time.Now()
		time.Sleep(time.Millisecond * 10)

		select {
		case evt := <-sv.EvtChan:
			sv.Exec(evt)
		default:
		}
	}
}

func (sv *SvMain) Destroy() {
	zlog.Info(sv.Name() + " Destroy")
}

func (sv *SvMain) Name() string {
	return "SvMain"
}

// Exec 执行事件
func (sv *SvMain) Exec(e *evt.Evt) {
	fn, ok := core.GetSvCore().EventExecMap[e.Type]
	if ok {
		fn(e)
	} else {
		zlog.Warn("无效事件：", e.Type)
	}
}
